//第一篇，js的继承|声明
// 类的三部分：
// 第一部，构造函数内，供类的实例化对象复制用
// 第二部分，构造函数外，通过点语法添加，供类使用
// 第三部分，类的原型中，实例化对象可以通过原型链访问到
//在声明一个类时，简单的用this，会导致this指向window例如
//在生命一个对象时，推荐使用闭包声明/分离私有方法公有方法
var Student = function (name,time) {
    this.name=name
    this.time=time
}
var hao = Student('郝栩彬','2017')
// console.log(hao)


//应用New实现或类中带有安全模式
var Student_safe = function (name,time) {
    //判断this指向
    if(this instanceof Student_safe){
        this.name=name
        this.time=time
    }else{
        //否则用new构建
        return new Student_safe('郝栩彬','2017')
    }
}
var hao_safe=Student_safe('郝栩彬','2017')
// console.log(hao_safe) //Student_safe { name: '郝栩彬', time: '2017' }

//简单的类式继承
function SuperClass() {
    this.supervalue=true
}
//父元素原型上增加属性
SuperClass.prototype.getSupValue=function () {
    return this.supervalue
}
//声明子类
function SubClass() {
    this.subvalue = false
}
//继承父类
SubClass.prototype = new SuperClass()
//子类声明函数
SubClass.prototype.getSubValue=function () {
    return this.subvalue
}
//实例化类
var instance = new SubClass()
// console.log(instance.getSupValue(),instance.getSubValue()) //true false
//简单类式继承，子类不是父类的实例，子类的原型instanceof 父类

//简单类式继承缺点：第一，子类通过原型对父类实例化，继承父类，如果父类中的共有属性是引用类型，就会在子类中实例被公用。
//父元素定义[]//{}子元素公用
// 第二，由于是原型继承，无法对实例化的父类进行传参



